package org.ch02.test01.demo01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 获得某个类的Class对象 - 方法一
 * Class.forName("包名.类型");
 *
 * 此案例完全基于反射来实现类的操作 - 更灵活、更好拓展
 *
 * @author CSY
 * @date 2025 - 03 - 17
 */
public class MainTest02 {
    public static void main(String[] args) throws Exception {
        //1、获取Student类的Class对象
        Class<?> clazz = Class.forName("org.ch02.entity.Student");

        //在反射中，把类的相关信息封装为相关的对象
        //2、通过Class对象，获取类的构造方法
        Constructor<?> constructor = clazz.getConstructor();

        //3、实例化对象
        Object obj = constructor.newInstance();

        //4、通过Class对象，获取要调用的方法
        //getMethod("方法名",方法参数的Class对象)
        Method method = clazz.getMethod("sayHello",String.class);

        //5、调用方法 - 对象.xxx()
        //在Method对象中，提供了invoke方法，调用Method对象指向的方法
        //[Object obj = ] invoke("对象名称",实参列表)
        method.invoke(obj,"张三");

    }
}
